//package testeffwithjavassits;
//
//
//import javassist.CannotCompileException;
//import javassist.ClassPool;
//import javassist.CtClass;
//import javassist.CtMethod;
//import org.openjdk.jmh.annotations.*;
//import org.openjdk.jmh.runner.Runner;
//import org.openjdk.jmh.runner.RunnerException;
//import org.openjdk.jmh.runner.options.Options;
//import org.openjdk.jmh.runner.options.OptionsBuilder;
//
//import java.lang.reflect.Method;
//import java.util.concurrent.TimeUnit;
//
//@BenchmarkMode(Mode.AverageTime)
//@State(Scope.Benchmark)
//@OutputTimeUnit(TimeUnit.MILLISECONDS)
//public class JavassitsEffWith {
//    Tets1 tets1 = new Tets1();
//    JavassitsTest javassitsTest = new JavassitsTest();
//
//    private static class Tets1 {
//
//        public void test1() {
//            try {
//                int i = 0;
//                i += 1;
//                Thread.sleep(10);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//
//    public static class JavassitsTest {
//
//        Class toClass = null;
//
//
//        public Object getJavassitsClass() {
//            try {
//                if (toClass == null) {
//                    CtClass makeClass = getMakeClass();
//                    toClass = makeClass.toClass();
//                }
//                Method repay1 = toClass.getMethod("test1", null);//得到方法对象,有参的方法需要指定参数类型
//                repay1.invoke(toClass, null);//执行还钱方法，有参传参
//                return null;
//
//            } catch (CannotCompileException e) {
//                e.printStackTrace();
//            } catch (IllegalAccessException e) {
//                e.printStackTrace();
//            } finally {
//                return null;
//            }
//        }
//
//        public CtClass getMakeClass() throws CannotCompileException {
//            ClassPool pool = ClassPool.getDefault();
//            CtClass makeClass = pool.makeClass("testeffwithjavassits." + "Effjavassits");
//            makeClass.addMethod(CtMethod.make("   public void test1() {\n" +
//                    "            try { " +
//                    "  int i = 0; " +
//                    "            i += 1;" +
//                    "           Thread.sleep(10L); " +
//                    "            } catch (InterruptedException e) {\n" +
//                    "                e.printStackTrace();\n" +
//                    "            } " +
//                    "        }", makeClass));
//            return makeClass;
//        }
//    }
//
//
//    @Benchmark
//    public void testJavassits() {
//        javassitsTest.getJavassitsClass();
//    }
//
//    @Benchmark
//    public void testJava() {
//        tets1.test1();
//    }
//
//    public static void main(String[] args) throws RunnerException {
//        Options options = new OptionsBuilder().include(JavassitsEffWith.class.getSimpleName())
//                .forks(1)
//                .warmupIterations(5)
//                .measurementIterations(5)
//                .build();
//        new Runner(options).run();
//    }
//
//}
